

public class ArrayListTest {

	public static void main(String[] args) {
		
		ArrayList alist = new ArrayList();

		for (int i=0; i < args.length; ++i) {
			alist.add(args[i]);
		}

		assert alist.size() == args.length;
		assert alist.isEmpty() == (args.length == 0);

		for (int i=0; i < args.length; ++i) {
			assert alist.get(i).equals(args[i]);
		}

		for (int i=0; i < args.length; ++i) {
			assert alist.contains(args[i]);
		}

		assert !alist.contains(null);

		for (int i=0; i < args.length; ++i) {
			alist.set(i, args[ args.length - i - 1 ]);
		}

		for (int i=0; i < args.length; ++i) {
			assert alist.get(i).equals(args[ args.length - i - 1 ]);
		}

		for (int i=0; i < args.length; ++i) {
			assert alist.contains(args[i]);
		}

		for (int i=0; i < args.length; ++i) {
			assert alist.remove(args[i]);
		}

		assert alist.size() == 0;
		assert alist.isEmpty();

		for (int i=0; i < args.length; ++i) {
			assert !alist.contains(args[i]);
		}

		assert !alist.contains(null);

		for (int i=0; i < args.length; ++i) {
			alist.add(args[i]);
		}

		Iterator it = alist.iterator();
		ListIterator lit = alist.listIterator(alist.size());
		for (int i=0; i < args.length; ++i) {
			assert it.hasNext();
			assert lit.hasPrevious();
			assert it.next().equals(args[i]);
			assert lit.previous().equals(args[args.length - i - 1]);
		}

		assert !it.hasNext();
		assert !lit.hasPrevious();

		it = alist.iterator();
		while (it.hasNext()) {
			it.next();
			it.remove();
		}

		assert alist.size() == 0;
		assert alist.isEmpty();

		System.out.println("Tests Succeeded!");
	}
}
